package br.com.android.pubclub.web;

import java.util.ArrayList;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import br.com.android.pubclub.R;
import br.com.android.pubclub.basicas.Amizade;
import br.com.android.pubclub.dados.ThreadAmizadesAcoes;
import br.com.android.pubclub.negocios.ItemClicado;

public class AmizadesAdapter extends BaseAdapter implements ItemClicado {

	private ArrayList<Amizade> listaDeAmizades;

	private int tipo;
	ProgressDialog pd;

	public AmizadesAdapter(ArrayList<Amizade> listaDeAmizades, int tipo) {

		this.listaDeAmizades = listaDeAmizades;
		this.tipo = tipo;

	}

	public ArrayList<Amizade> getListaDeAmizades() {
		return listaDeAmizades;
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return listaDeAmizades.size();
	}

	@Override
	public Amizade getItem(int position) {
		// TODO Auto-generated method stub
		return listaDeAmizades.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return listaDeAmizades.get(position).getId();
	}

	private void atualizarInterface(Message msg, Context ctx, int position) {
		// TODO Auto-generated method stub

		switch (msg.what) {
		case ThreadAmizadesAcoes.EXECUTANDO:

			pd.setMessage("Enviando...");
			pd.show();

			break;

		case ThreadAmizadesAcoes.EXIBINDO:

			View v = LayoutInflater.from(ctx).inflate(
					R.layout.progress_bar_custom_view, null);

			ImageView imgViewProgDialog = (ImageView) v
					.findViewById(R.id.imgViewProgDialog);

			TextView txtProgDialog = (TextView) v
					.findViewById(R.id.txtProgDialog);

			pd.setContentView(v);

			Bundle bundle = (Bundle) msg.getData();

			boolean sucesso = bundle.getBoolean("sucesso");

			if (sucesso) {
				imgViewProgDialog
						.setImageResource(R.drawable.abc_ic_cab_done_holo_dark);
				itemFoiClicado(position, ctx);
			}
			txtProgDialog.setText(bundle.getString("mensagem"));

			break;
		case ThreadAmizadesAcoes.CONCLUIDO:

			pd.dismiss();
			break;
		}

	}

	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub

		final Holder holder;
		final Context ctx = parent.getContext();

		pd = new ProgressDialog(ctx);

		final Amizade amizade = listaDeAmizades.get(position);

		switch (tipo) {

		case Amigos.SOLICITACOES_PENDENTES_RECEBIDAS:
			if (convertView == null) {

				convertView = LayoutInflater.from(ctx).inflate(
						R.layout.linha_solicitacoes_pendentes, null);

				holder = new Holder();
				holder.txtNome = (TextView) convertView
						.findViewById(R.id.txtNomeSolicitanteAmizade);
				holder.btnAceitarAmizade = (Button) convertView
						.findViewById(R.id.btnAceitarAmiz);
				holder.btnRecusarAmizade = (Button) convertView
						.findViewById(R.id.btnRecusarAmiz);
				
				convertView.setTag(holder);

			} else {
				holder = (Holder) convertView.getTag();
			}

			holder.txtNome.setText(amizade.getAmigo().getNome());

			holder.btnAceitarAmizade.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					// TODO Auto-generated method stub

					

					Bundle bd = new Bundle();
					bd.putSerializable("solicitante", amizade.getAmigo());
					bd.putSerializable("solicitado", Login.clienteLogado);
					bd.putBoolean("resposta", true);
					ThreadAmizadesAcoes acaoAmizade = new ThreadAmizadesAcoes(
							new Handler() {

								@Override
								public void handleMessage(Message msg) {
									// TODO Auto-generated method stub
									atualizarInterface(msg, ctx, position);
								}

							}, Amigos.RESPONDER_SOLICITACAO, bd);
					acaoAmizade.start();

				}
			});

			holder.btnRecusarAmizade.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					// TODO Auto-generated method stub
					
					Bundle bd = new Bundle();
					bd.putSerializable("solicitante", amizade.getAmigo());
					bd.putSerializable("solicitado", Login.clienteLogado);
					bd.putBoolean("resposta", false);

					ThreadAmizadesAcoes acaoAmizade = new ThreadAmizadesAcoes(
							new Handler() {

								@Override
								public void handleMessage(Message msg) {
									// TODO Auto-generated method stub
									atualizarInterface(msg, ctx, position);
								}

							}, Amigos.RESPONDER_SOLICITACAO, bd);
					acaoAmizade.start();

				}
			});

			break;

		case Amigos.SOLICITACOES_PENDENTES_ENVIADAS:

			if (convertView == null) {

				convertView = LayoutInflater.from(ctx).inflate(
						R.layout.lista_de_clientes_linha, null);

				holder = new Holder();
				holder.txtNome = (TextView) convertView
						.findViewById(R.id.txtNome);

				holder.txtEmail = (TextView) convertView
						.findViewById(R.id.txtEmail);
				convertView.setTag(holder);

			} else {
				holder = (Holder) convertView.getTag();
			}

			holder.txtNome.setText(amizade.getAmigo().getNome());
			holder.txtEmail.setText(amizade.getAmigo().getEmail());

			break;
		case Amigos.AMIGOS:

			if (convertView == null) {

				convertView = LayoutInflater.from(ctx).inflate(
						R.layout.lista_de_clientes_linha, null);

				holder = new Holder();
				holder.txtNome = (TextView) convertView
						.findViewById(R.id.txtNome);

				holder.txtEmail = (TextView) convertView
						.findViewById(R.id.txtEmail);
				convertView.setTag(holder);

			} else {
				holder = (Holder) convertView.getTag();
			}

			holder.txtNome.setText(amizade.getAmigo().getNome());
			holder.txtEmail.setText(amizade.getAmigo().getEmail());
			break;
		}

		return convertView;

	}

	static class Holder {

		TextView txtNome;
		TextView txtEmail;
		Button btnAceitarAmizade;
		Button btnRecusarAmizade;
		

	}

	@Override
	public void itemFoiClicado(int position, Context ctx) {
		// TODO Auto-generated method stub

		
		if ( ctx  instanceof SolicitacoesPendentes) {
			 ((SolicitacoesPendentes) ctx).itemFoiClicado(position, ctx);
			 
		}
		
		if ( ctx  instanceof MenuInicial) {
			 ((MenuInicial) ctx).itemFoiClicado(position, ctx);
			 
		}
	}
}
